﻿#define  _CRT_SECURE_NO_WARNINGS
#include "game.h"
//初始化棋盘，将所有位置设置为给定的字符。
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
	printf("---------扫雷游戏---------\n");
	for (int i = 0; i <= col; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (int a = 1; a <= row; a++)
	{
		printf("%d ", a);
		for (int b = 1; b <= col; b++)
		{
			printf("%c ", board[a][b]);
		}
		printf("\n");
	}
}
//布置雷
void SetMine(char board[ROWS][COLS], int row, int col)
{
	int count = EASY_COUNT;
	while (count)
	{
		int x = rand()%row+1;
		int y = rand()%col+1;
		if (board[x][y]=='0')
		{
			board[x][y] = '1';
			count--;
		}
	}
}
//计算给定坐标周围雷的数量。
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
	return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y-1] + mine[x + 1][y]
		+mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');
}

//排查雷:玩家进行排雷操作，输入坐标进行排查，如果排查到雷则游戏结束，否则显示该坐标周围雷的数量。
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
    int x = 0;
    int y = 0;
    int win = 0;
    while (win < row * col - EASY_COUNT)
    {
        printf("请输入要排查的坐标: > ");
            scanf("%d %d", &x, &y);
        if (x >= 1 && x <= row && y >= 1 && y <= col)
        {
            if (mine[x][y] == '1')
            {
                printf("很遗憾，你被炸死了\n");
                    DisplayBoard(mine, ROW, COL);
                break;
            }
            else//该位置不是雷，统计这个坐标周围有几个雷
            {
				//调用GetMineCount函数来计算该位置周围8个方向上的地雷数量
                int count = GetMineCount(mine, x, y);
				//将结果存储在show数组的相应位置上
                show[x][y] = count + '0';
				//显示更新后的show数组给用户，并将win变量的值增加1
                DisplayBoard(show, ROW, COL);
                win++;
            }
        }
        else
        {
            printf("坐标非法，重新输⼊\n");
        }
    }
    if (win == row * col - EASY_COUNT)
    {
        printf("恭喜你，排雷成功\n");
            DisplayBoard(mine, ROW, COL);
    }
}


/*
InitBoard
功能：初始化棋盘，将所有位置设置为给定的字符。
参数：board 是棋盘数组，rows 和 cols 是棋盘的行数和列数，set 是用于初始化棋盘的字符。

DisplayBoard
功能：打印棋盘。
参数：board 是棋盘数组，row 和 col 是棋盘的行数和列数。

SetMine
功能：在棋盘上随机布置雷。
参数：board 是棋盘数组，row 和 col 是棋盘的行数和列数。

GetMineCount
功能：计算给定坐标周围雷的数量。
参数：mine 是存放雷的棋盘数组，x 和 y 是要计算雷数量的坐标。

FindMine
功能：玩家进行排雷操作，输入坐标进行排查，如果排查到雷则游戏结束，否则显示该坐标周围雷的数量。
参数：mine 是存放雷的棋盘数组，show 是显示排查结果的棋盘数组，row 和 col 是棋盘的行数和列数
*/